﻿using System;
using System.Windows.Forms;
using EntitiesAndMappings.Entities;
using ProyectoActivos.Daos;
using ProyectoActivos.Util;
using ProyectoActivos.Validate;

namespace ProyectoActivos.Forms.Consultas
{
    public partial class FrmConsultaMovimientoArticulos : Form
    {
        private bool _valido;
        
        public static FrmConsultaMovimientoArticulos Activo;

        public FrmConsultaMovimientoArticulos()
        {
            InitializeComponent();
            _valido = true;
            dGridResultado.AutoGenerateColumns = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if(checkBox1.Checked && datInicio.Value.Date>datFin.Value.Date)
            {
                errorProvider.SetError(datInicio,"La fecha de inicio debe ser menor o igual que la fecha de fin");
                Invalid();
            }
            ActionExecutor.Execute(this, delegate
            {
                var filtro = new ConsultaMovimientoReq
                {
                    Familia = cmbFamilia.SelectedItem as Familia,
                    SubFamilia = cmbSubFamilia.SelectedItem as SubFamilia,
                    Marca = cmbMarca.SelectedItem as Marca,
                    CodigoArticulo = txtCodigoArticulo.Text.Trim(),
                    TipoMovimiento = cmbTipoMovimiento.SelectedItem as TipoMovimiento,
                    Almacen = radioAlmacen.Checked ? cmbAlmacen.SelectedItem as Almacen : cmbAlmacen.Items[0] as Almacen,
                    Proyecto = radioAlmacen.Checked ? cmbProyecto.Items[0] as Proyecto : cmbProyecto.SelectedItem as Proyecto,
                    Lote = radioAlmacen.Checked ? cmbLote.Items[0] as Lote : cmbLote.SelectedItem as Lote,
                    Lugar = radioAlmacen.Checked ? cmbLugar.Items[0] as Lugar : cmbLugar.SelectedItem as Lugar,
                    FechaInicio = checkBox1.Checked ? datInicio.Value.Date : DateTime.MinValue,
                    FechaFin = checkBox1.Checked ? datInicio.Value.Date : DateTime.MinValue
                };
                var list = new ConsultasDAO().ObtenerMovimientosArticulos(filtro);
                dGridResultado.DataSource = list;
            });
        }

        private void FrmConsultaMovimientoArticulos_Load(object sender, EventArgs e)
        {
            ActionExecutor.Execute(this, delegate
            {
                var familiaDAO = new EntidadGenericaDAO<Familia>();
                var listadoFamilia = familiaDAO.ObtenerActivos();
                cmbFamilia.DataSource = ComboUtils.AgregarAlInicio(new Familia { Codigo = string.Empty, Descripcion = " Seleccionar -" }, listadoFamilia);

                var subFamiliaDAO = new SubFamiliaDAO();
                var listadoSubFamilia = subFamiliaDAO.ObtenerActivos();
                cmbSubFamilia.DataSource = ComboUtils.AgregarAlInicio(new SubFamilia { Codigo = string.Empty, Descripcion = " Seleccionar -" }, listadoSubFamilia);

                var tipoMovimientoDAO = new TipoMovimientoDAO();
                var listadoTipoMovimiento = tipoMovimientoDAO.ObtenerActivos();
                cmbTipoMovimiento.DataSource = ComboUtils.AgregarAlInicio(new TipoMovimiento { Codigo = string.Empty, Descripcion = " Seleccionar -" }, listadoTipoMovimiento);

                var almacenDAO = new AlmacenDAO();
                var listadoAlmacen = almacenDAO.ObtenerActivos();
                cmbAlmacen.DataSource = ComboUtils.AgregarAlInicio(new Almacen { Codigo = string.Empty, Nombre = " Seleccionar -" }, listadoAlmacen);

                var proyectoDAO = new EntidadGenericaDAO<Proyecto>();
                var listadoProyecto = proyectoDAO.ObtenerActivos();
                cmbProyecto.DataSource = ComboUtils.AgregarAlInicio(new Proyecto { Codigo = string.Empty, Descripcion = " Seleccionar -" }, listadoProyecto);

                var loteDAO = new EntidadGenericaDAO<Lote>();
                var listadoLote = loteDAO.ObtenerActivos();
                cmbLote.DataSource = ComboUtils.AgregarAlInicio(new Lote { Codigo = string.Empty, Descripcion = " Seleccionar -" }, listadoLote);

                var lugarDAO = new EntidadGenericaDAO<Lugar>();
                var listadoLugar = lugarDAO.ObtenerActivos();
                cmbLugar.DataSource = ComboUtils.AgregarAlInicio(new Lugar { Codigo = string.Empty, Descripcion = " Seleccionar -" }, listadoLugar);

                var marcaDAO = new EntidadGenericaDAO<Marca>();
                var listadoMarca = marcaDAO.ObtenerActivos();
                cmbMarca.DataSource = ComboUtils.AgregarAlInicio(new Marca { Codigo = string.Empty, Descripcion = " Seleccionar -" }, listadoMarca);
            });
        }

        private void tStripButtonExportarAExcel_Click(object sender, EventArgs e)
        {
            if (dGridResultado.Rows.Count > 0)
            {
                ActionExecutor.Execute(this, () => ExcelUtils.ExportarGridAExcel(dGridResultado));
            }
        }

        public void Invalid()
        {
            _valido = false;
        }

        public bool IsValid()
        {
            return _valido;
        }

        private void FrmConsultaMovimientoArticulos_FormClosing(object sender, FormClosingEventArgs e)
        {
            Activo = null;
        }

        private void radioAlmacen_CheckedChanged(object sender, EventArgs e)
        {
            cmbAlmacen.Enabled = !cmbAlmacen.Enabled;
            cmbProyecto.Enabled = !cmbProyecto.Enabled;
            cmbLote.Enabled = !cmbLote.Enabled;
            cmbLugar.Enabled = !cmbLugar.Enabled;
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            datInicio.Enabled = !datInicio.Enabled;
            datFin.Enabled = !datFin.Enabled;
        }
    }
}
